Generally, each CPU in multi-CPU computer systems is run by a clock. Depending on implementations, clocks for all CPUs in the system may be provided by one or a plurality of clock sources, but each approach has its own deficiencies. For example, in the single-clock-source approach, a clock source, e.g., a clock generator, provides the clock for all CPUs, and this clock is therefore the same for all CPUs receiving it. However, this approach is subject to single points of failures. That is, for another example, if either the clock generation or distribution fails, then the whole system fails.
In the multi-clock-source approach, such as one in which one clock generator provides a clock for a processing cell in a multi-cell system, all CPUs in a cell receive the same clock from one clock source, but each cell receives a different clock from a different clock source. As a result, if a clock fails, then only the cell using that clock fails, but cells using other clocks can continue to function. Unfortunately, clock drifts in the different clock sources can cause various problems such as the calculation resulting in negative time, or time elapsing backwards. Clock drifts may be referred to as variations in the clock frequency seen by different CPUs. In SMP (Symmetric MultiProcessing) systems, a thread can be initiated by one CPU and subsequently runs on another CPU. For example, if the ar.itc register, which is an application register that contains the value of the interval time counter, is read by a thread running on a fast-clocked CPU, and the thread later migrates to a slow-clocked CPU, then the ar.itc register now running on the slow-clocked CPU could have a value lower than the value from the first read, e.g., the read from the fast-clocked CPU, which would cause elapsed time to be calculated as being negative.